﻿//начало текста модуля
&НаКлиенте
Перем Ванесса;
&НаКлиенте
Перем МаксКоличествоСекундПодключения,ТекКоличествоСекундПодключения;

&НаКлиенте
Функция ДобавитьШагВМассивТестов(МассивТестов,Снипет,ИмяПроцедуры,ПредставлениеТеста = Неопределено,Транзакция = Неопределено,Параметр = Неопределено)
	Структура = Новый Структура;
	Структура.Вставить("Снипет",Снипет);
	Структура.Вставить("ИмяПроцедуры",ИмяПроцедуры);
	Структура.Вставить("ИмяПроцедуры",ИмяПроцедуры);
	Структура.Вставить("ПредставлениеТеста",ПредставлениеТеста);
	Структура.Вставить("Транзакция",Транзакция);
	Структура.Вставить("Параметр",Параметр);
	МассивТестов.Добавить(Структура);
КонецФункции

&НаКлиенте
Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
	Ванесса = КонтекстФреймворкаBDD;
	
	ВсеТесты = Новый Массив;

	//описание параметров
	//ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,Транзакция,Параметр);

	ДобавитьШагВМассивТестов(ВсеТесты,"ЯРаботаюВСеансеЗапущенногоСКлючомTESTMANAGER()","ЯРаботаюВСеансеЗапущенногоСКлючомTESTMANAGER","Я работаю в сеансе, запущенного с ключом TESTMANAGER");
	ДобавитьШагВМассивТестов(ВсеТесты,"ЯСворачиваюВсеОкна()","ЯСворачиваюВсеОкна","я сворачиваю все окна");
	ДобавитьШагВМассивТестов(ВсеТесты,"ЯЗапускаюСеанс1ССКлючомTESTCLIENTСЛогиномИПаролем()","ЯЗапускаюСеанс1ССКлючомTESTCLIENTСЛогиномИПаролем","Я запускаю сеанс 1С с ключом TESTCLIENT");
	ДобавитьШагВМассивТестов(ВсеТесты,"ЯУстанавливаюСоединениеССеансомTESTCLIENT()","ЯУстанавливаюСоединениеССеансомTESTCLIENT","я устанавливаю соединение с сеансом TESTCLIENT");
	ДобавитьШагВМассивТестов(ВсеТесты,"ЯАктивизируюГлавноеОкноСеансаTESTCLIENT()","ЯАктивизируюГлавноеОкноСеансаTESTCLIENT","я активизирую главное окно сеанса TESTCLIENT");
	ДобавитьШагВМассивТестов(ВсеТесты,"ВПеременнойКонтекстПоявилосьЗначениеГлавноеОкноТестируемого()","ВПеременнойКонтекстПоявилосьЗначениеГлавноеОкноТестируемого","в переменной Контекст появилось значение ГлавноеОкноТестируемого");
	ДобавитьШагВМассивТестов(ВсеТесты,"ЯЗакрываюСеансTESTCLIENT()","ЯЗакрываюСеансTESTCLIENT","я закрываю сеанс TESTCLIENT");

	Возврат ВсеТесты;
КонецФункции

&НаКлиенте
Процедура ПередНачаломСценария() Экспорт
	
КонецПроцедуры

&НаКлиенте
Процедура ПередОкончаниемСценария() Экспорт
	
КонецПроцедуры


&НаКлиенте
//Я работаю в сеансе, запущенного с ключом TESTMANAGER
//@ЯРаботаюВСеансеЗапущенногоСКлючомTESTMANAGER()
Процедура ЯРаботаюВСеансеЗапущенногоСКлючомTESTMANAGER() Экспорт
	Попытка
		ТипЗначения = Тип("ТестируемоеПриложение");
	Исключение
		ВызватьИсключение "Хост сеанс надо запустить с ключом /TESTMANAGER.";
	КонецПопытки;
	
КонецПроцедуры


&НаКлиенте
//я сворачиваю все окна
//@ЯСворачиваюВсеОкна()
Процедура ЯСворачиваюВсеОкна() Экспорт
	СисИнфо = Новый СистемнаяИнформация; 
	Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда
		Оболочка = Новый COMОбъект("Shell.Application");
		Оболочка.MinimizeAll();
	КонецЕсли;	 
КонецПроцедуры

&НаКлиенте
//Я запускаю сеанс 1С с ключом TESTCLIENT С Логином "НетЛогина" И Паролем "НетПароля"
//@ЯЗапускаюСеанс1ССКлючомTESTCLIENTСЛогиномИПаролем()
Процедура ЯЗапускаюСеанс1ССКлючомTESTCLIENTСЛогиномИПаролем(Логин,Пароль) Экспорт
	
	УстановитьКраткийЗаголовокПриложения("Vanessa-behavior");
	
	Контекст.Вставить("Логин",Логин);
	Контекст.Вставить("Пароль",Пароль);
	
	Если КонтекстСохраняемый.Свойство("ТестовоеПриложение") Тогда
		Если КонтекстСохраняемый.ТестовоеПриложение <> Неопределено Тогда
			Попытка
				КонтекстСохраняемый.ТестовоеПриложение.УстановитьСоединение();
				ГлавноеОкноТестКлиента = КонтекстСохраняемый.ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"),,,5);
			Исключение
				ГлавноеОкноТестКлиента = Неопределено;
			КонецПопытки;
			
			Если ГлавноеОкноТестКлиента <> Неопределено Тогда
				Возврат;
			КонецЕсли;	 
		КонецЕсли;	 
	КонецЕсли;	 
	
	
	
	
	СисИнфо = Новый СистемнаяИнформация; 
	
	ВерсияПриложения = СисИнфо.ВерсияПриложения;
	//Сообщить("ВерсияПриложения="+ВерсияПриложения);
	ПутьК1С = "C:\Program Files (x86)\1cv8\" + ВерсияПриложения + "\bin\1cv8.exe";
	ФайлПроверкаСуществования = Новый Файл(ПутьК1С);
	
	Если НЕ ФайлПроверкаСуществования.Существует() Тогда
		ВызватьИсключение "Не нашел путь к 1cv8.exe: " + ПутьК1С;
		Возврат;
	КонецЕсли;	 
	
	КаталогБазы = СтрокаСоединенияИнформационнойБазы();
	
	Если Найти(ВРег(КаталогБазы),ВРег("File=")) > 0 Тогда
		
		КаталогБазы = СтрЗаменить(КаталогБазы,"File="," /F");
		КаталогБазы = СтрЗаменить(КаталогБазы,";","");
		
	Иначе
		
		КаталогБазы = СтрЗаменить(КаталогБазы,"Srvr=","/S");
		КаталогБазы = СтрЗаменить(КаталогБазы,""";Ref=""","\");
		
	КонецЕсли;
	
	
	Если НРег(Логин) <> НРег("НетЛогина") Тогда
		КаталогБазы = КаталогБазы + " /N""" + Логин +  """ /P""" + Пароль + """";
	КонецЕсли;	 
	//Сообщить("СтрокаСоединенияИнформационнойБазы="+СтрокаСоединенияИнформационнойБазы);
	
	СтрокаЗапуска = """" + ПутьК1С + """ ENTERPRISE " + КаталогБазы + " /TESTCLIENT /RunModeManagedApplication";
	//Сообщить("СтрокаЗапуска="+СтрокаЗапуска);

	ЗапуститьСистему(СтрокаЗапуска);
	
	ТипЗначения = Тип("ТестируемоеПриложение");
	ПараметрыОбъекта = Новый Массив;
	ПараметрыОбъекта.Добавить("localhost");
	ТестовоеПриложение = Новый (ТипЗначения,ПараметрыОбъекта);
	
	КонтекстСохраняемый.Вставить("ТестовоеПриложение",ТестовоеПриложение);
	
КонецПроцедуры


&НаКлиенте
Процедура УстановитьСоединениеССеансомTESTCLIENT()
	//Ванесса.ПосмотретьЗначение(Контекст);
	ТестовоеПриложение = КонтекстСохраняемый.ТестовоеПриложение;
	
	ТекКоличествоСекундПодключения = ТекКоличествоСекундПодключения + 1;
	Сообщить("ТекКоличествоСекундПодключения=" + ТекКоличествоСекундПодключения);
	
	Попытка
		ТестовоеПриложение.УстановитьСоединение();
		ОтключитьОбработчикОжидания("УстановитьСоединениеССеансомTESTCLIENT");
		Сообщить("Подключились к сеансу TESTCLIENT!!!");
		Ванесса.ПродолжитьВыполнениеШагов();
		
		Возврат;
	Исключение
		Сообщить("" + ОписаниеОшибки());
	КонецПопытки;
	
	Если ТекКоличествоСекундПодключения >= МаксКоличествоСекундПодключения Тогда
		ОтключитьОбработчикОжидания("УстановитьСоединениеССеансомTESTCLIENT");
		Ванесса.ПродолжитьВыполнениеШагов();
	КонецЕсли;	 
	
КонецПроцедуры


&НаКлиенте
//я устанавливаю соединение с сеансом TESTCLIENT
//@ЯУстанавливаюСоединениеССеансомTESTCLIENT()
Процедура ЯУстанавливаюСоединениеССеансомTESTCLIENT() Экспорт
	Ванесса.ЗапретитьВыполнениеШагов();
	
	МаксКоличествоСекундПодключения = 10;
	ТекКоличествоСекундПодключения  = 0;
	
	ПодключитьОбработчикОжидания("УстановитьСоединениеССеансомTESTCLIENT",1);
	
КонецПроцедуры


&НаКлиенте
Процедура ПолучитьГлавноеОкноТестируемогоПриложения()
	
	ТестовоеПриложение = КонтекстСохраняемый.ТестовоеПриложение;
	
	ТекКоличествоСекундПодключения = ТекКоличествоСекундПодключения + 1;
	Сообщить("ТекКоличествоСекундПодключения=" + ТекКоличествоСекундПодключения);
	
	Если ТекКоличествоСекундПодключения >= МаксКоличествоСекундПодключения Тогда
		ОтключитьОбработчикОжидания("ПолучитьГлавноеОкноТестируемогоПриложения");
		Сообщить("Не смог ПолучитьГлавноеОкноТестируемогоПриложения!");
		Ванесса.ПродолжитьВыполнениеШагов();
	КонецЕсли;	 
	
	
	Попытка
		ГлавноеОкноТестируемого = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"));
		ГлавноеОкноТестируемого.Активизировать();
		ОтключитьОбработчикОжидания("ПолучитьГлавноеОкноТестируемогоПриложения");
		КонтекстСохраняемый.Вставить("ГлавноеОкноТестируемого",ГлавноеОкноТестируемого);
		Ванесса.ПродолжитьВыполнениеШагов();
	Исключение
		Сообщить("" + ОписаниеОшибки());
	КонецПопытки;
	
КонецПроцедуры


&НаКлиенте
Процедура ЗавершитьСеансыTestClientПринудительно()
	Ванесса.ЗавершитьСеансыTestClientПринудительно();
КонецПроцедуры


&НаКлиенте
//я активизирую главное окно сеанса TESTCLIENT
//@ЯАктивизируюГлавноеОкноСеансаTESTCLIENT()
Процедура ЯАктивизируюГлавноеОкноСеансаTESTCLIENT() Экспорт
	
	ОписаниеОшибки = "";
	ТестовоеПриложение = КонтекстСохраняемый.ТестовоеПриложение;
	Попытка
		ГлавноеОкноТестируемого = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"),,,5);
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
		ГлавноеОкноТестируемого = Неопределено;
	КонецПопытки;
	
	Если ГлавноеОкноТестируемого = Неопределено Тогда
		Сообщить("Делаю перезапуск TESTCLIENT. ОписаниеОшибки=" + ОписаниеОшибки);
		ЗавершитьСеансыTestClientПринудительно();
		ЯЗапускаюСеанс1ССКлючомTESTCLIENTСЛогиномИПаролем(Контекст.Логин,Контекст.Пароль);
		ТестовоеПриложение      = КонтекстСохраняемый.ТестовоеПриложение;
		ГлавноеОкноТестируемого = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"),,,20);
	КонецЕсли;	 
	
	ГлавноеОкноТестируемого.Активизировать();
	
	КонтекстСохраняемый.Вставить("ГлавноеОкноТестируемого",ГлавноеОкноТестируемого);
	
	//Ванесса.ЗапретитьВыполнениеШагов();
	//ТекКоличествоСекундПодключения  = 0;
	//МаксКоличествоСекундПодключения = 10;
	//ПодключитьОбработчикОжидания("ПолучитьГлавноеОкноТестируемогоПриложения",1);

	
	//ТестовоеПриложение = КонтекстСохраняемый.ТестовоеПриложение;
	//
	//АктивноеОкно = ТестовоеПриложение.ПолучитьАктивноеОкно();
	//Сообщить("АктивноеОкно=" + АктивноеОкно);
	//ГлавноеОкноТестируемого = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"));
	//ГлавноеОкноТестируемого.Активизировать();
КонецПроцедуры


&НаКлиенте
//в переменной Контекст появилось значение ГлавноеОкноТестируемого
//@ВПеременнойКонтекстПоявилосьЗначениеГлавноеОкноТестируемого()
Процедура ВПеременнойКонтекстПоявилосьЗначениеГлавноеОкноТестируемого() Экспорт
	Ванесса.ПроверитьРавенство(КонтекстСохраняемый.Свойство("ГлавноеОкноТестируемого"),Истина,"В контексте есть ГлавноеОкноТестируемого.");
КонецПроцедуры


&НаКлиенте
//я закрываю сеанс TESTCLIENT
//@ЯЗакрываюСеансTESTCLIENT()
Процедура ЯЗакрываюСеансTESTCLIENT() Экспорт
	КонтекстСохраняемый.ГлавноеОкноТестируемого.Закрыть();
	КонтекстСохраняемый.ГлавноеОкноТестируемого = Неопределено;
	
	Попытка
		КонтекстСохраняемый.ТестовоеПриложение.РазорватьСоединение();
	Исключение
		//	
	КонецПопытки;
	
	КонтекстСохраняемый.ТестовоеПриложение   = Неопределено;
КонецПроцедуры

//окончание текста модуля
